package GUI;

import CDB.Categorias;
import CDB.Detalleproducto;
import CDB.Detallesubcategoria;
import CDB.Empleados;
import CDB.Producto;
import CDB.Stock;
import CDB.Subcategoria;
import CDB.Ventas;
import Negocios.ControlCategories;
import Negocios.ControlProduct;
import Negocios.ControlProductDetail;
import Negocios.ControlSales;
import Negocios.ControlSalesDetail;
import Negocios.ControlStock;
import Negocios.ControlSubcategory;
import Negocios.ControlSubcategoryDetail;
import Utilidades.ManejadorFechas;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.util.Date;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import ticket.impresion.ControlTicket;
import ticket.impresion.ControlTicketNDB;

/**
 *
 * @author ISCErick
 */
public class PuntoVentaTeteria extends javax.swing.JInternalFrame {

    private Empleados empleado;
    private int contadorColores = 0;
    private JPanel[] jpnCategoria;

    public PuntoVentaTeteria(Empleados empleado) {
        initComponents();
        this.empleado = empleado;
        this.getContentPane().setBackground(Color.WHITE);
        if (isProductos()) {
            cargarCategorias();
            tblVenta.getColumnModel().getColumn(0).setMaxWidth(0);
            tblVenta.getColumnModel().getColumn(0).setMinWidth(0);
            tblVenta.getColumnModel().getColumn(0).setPreferredWidth(0);
        } else {
            JOptionPane.showMessageDialog(null, "Para poder vender necesita al menos un producto registrado",
                    "No hay productos registrados", 0);
            btnBorrar.setEnabled(false);
            btnCerrar.setEnabled(false);
            btnVender.setEnabled(false);
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        spanVenta = new javax.swing.JScrollPane();
        tblVenta = new javax.swing.JTable();
        panControles = new javax.swing.JPanel();
        lblIcono = new javax.swing.JLabel();
        btnVender = new javax.swing.JButton();
        btnBorrar = new javax.swing.JButton();
        btnCerrar = new javax.swing.JButton();
        txtTotal = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jtpCategorias = new javax.swing.JTabbedPane();

        setClosable(true);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);
        setTitle("Sales Tea Dispatcher - Punto de venta");
        setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosGenerales/dollar.png"))); // NOI18N

        spanVenta.setBackground(new java.awt.Color(255, 255, 255));
        spanVenta.setBorder(null);
        spanVenta.setForeground(new java.awt.Color(255, 255, 255));
        spanVenta.setOpaque(false);

        tblVenta.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Clave", "Producto", "Precio"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblVenta.setGridColor(new java.awt.Color(255, 255, 255));
        tblVenta.setRowHeight(20);
        tblVenta.setSelectionBackground(new java.awt.Color(255, 102, 0));
        tblVenta.getTableHeader().setReorderingAllowed(false);
        spanVenta.setViewportView(tblVenta);

        panControles.setBackground(new java.awt.Color(204, 204, 204));

        lblIcono.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblIcono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosGenerales/shopcart.png"))); // NOI18N

        btnVender.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosGenerales/dollar.png"))); // NOI18N
        btnVender.setText("Vender");
        btnVender.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVenderActionPerformed(evt);
            }
        });

        btnBorrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosGenerales/delete.png"))); // NOI18N
        btnBorrar.setText("Borrar");
        btnBorrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBorrarActionPerformed(evt);
            }
        });

        btnCerrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosGenerales/Error.png"))); // NOI18N
        btnCerrar.setText("Cancelar");
        btnCerrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCerrarActionPerformed(evt);
            }
        });

        txtTotal.setEditable(false);
        txtTotal.setBackground(new java.awt.Color(255, 255, 255));
        txtTotal.setFont(new java.awt.Font("Arial", 0, 36)); // NOI18N
        txtTotal.setForeground(new java.awt.Color(51, 204, 0));
        txtTotal.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        txtTotal.setText("$0.0");
        txtTotal.setToolTipText("");
        txtTotal.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(51, 204, 0), 2, true), "TOTAL", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Arial", 0, 18), new java.awt.Color(0, 0, 0))); // NOI18N

        jLabel1.setForeground(new java.awt.Color(255, 0, 0));
        jLabel1.setText("Eliminar un producto de la lista:");

        jLabel2.setForeground(new java.awt.Color(255, 0, 0));
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("Cancelar toda la venta:");

        javax.swing.GroupLayout panControlesLayout = new javax.swing.GroupLayout(panControles);
        panControles.setLayout(panControlesLayout);
        panControlesLayout.setHorizontalGroup(
            panControlesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panControlesLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panControlesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btnCerrar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(txtTotal)
                    .addComponent(btnBorrar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(panControlesLayout.createSequentialGroup()
                        .addGroup(panControlesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnVender, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(lblIcono, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        panControlesLayout.setVerticalGroup(
            panControlesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panControlesLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblIcono)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnVender)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnBorrar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnCerrar)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jtpCategorias, javax.swing.GroupLayout.DEFAULT_SIZE, 598, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(spanVenta, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panControles, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jtpCategorias, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addComponent(panControles, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(spanVenta, javax.swing.GroupLayout.DEFAULT_SIZE, 504, Short.MAX_VALUE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private boolean isStock(int idStock, int Consumo) {
        boolean hayStock = false;
        ControlStock constock = new ControlStock();
        Stock stock = constock.selectOne(idStock);
        if (stock.getCantidad() > Consumo) {
            hayStock = true;
        } else {
            hayStock = false;
        }
        if (stock.getCantidad() < stock.getMinimo()) {
            JOptionPane.showMessageDialog(this, "Se esta agotando el Stock de: " + stock.getNombre(), "Agotamiento de recurso", 2);
        }

        return hayStock;
    }

    private void btnVenderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVenderActionPerformed
        ControlSales controlVenta = new ControlSales();
        ControlProductDetail controlProDet = new ControlProductDetail();
        ControlStock controlStock = new ControlStock();
        //Contiene Venta y Producto
        ControlSalesDetail controlVentaDetalle = new ControlSalesDetail();
        Detalleproducto detalle = null;
        Ventas venta = null;
        //Obtiene la fecha del sistema
        ManejadorFechas manejaFecha = new ManejadorFechas();
        Date fecha = manejaFecha.getFechaActual();
        try {
            //Recupero el total de la caja de texto
            float total = Float.parseFloat(txtTotal.getText().substring(1).toString());
            //Contiene fecha, venta y empleado
            controlVenta.add(fecha, empleado, (int) total);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, "El error es: " + e, "Imposible crear venta", 0);
            txtTotal.setText("$0.0");
        }

        try {
            //Saca la ultima venta
            venta = controlVenta.getLast();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, "El error es: " + e, "Imposible obtener ultima venta", 0);
            txtTotal.setText("$0.0");
        }

        try {
            //Pasa cada articulo de la tabla al detalle
            for (int i = 0; i < tblVenta.getModel().getRowCount(); i++) {
                //Recupera el id del producto seleccionado en tabla
                int idDetalle = Integer.parseInt(tblVenta.getValueAt(i, 0).toString());
                //Contiene el producto
                detalle = controlProDet.selectOne(idDetalle);
                //Creal el stock
                Stock stock = detalle.getProducto().getStock();

                int exitencias = stock.getCantidad();
                int consumo = detalle.getConsumo();
                //Actualiza la existencias en Stock
                if (isStock(stock.getIdstock(), consumo)) {
                    controlStock.Update(stock.getIdstock(), stock.getNombre(),
                            (exitencias - consumo), stock.getMinimo(),
                            stock.getPreciogranel(), stock.getProveedores());
                    //Crea el detalle
                    controlVentaDetalle.add(venta, detalle.getProducto(), detalle);
                } else {
                    controlVenta.delete(venta.getIdventa());
                    JOptionPane.showMessageDialog(this, "No hay suficiente stock para realizar la venta: ", "Se ha cancelado la venta", 0);
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, "El error es: " + e,
                    "Ha ocurrido un error", 0);
            txtTotal.setText("$0.0");
        }

        try {
            //ControlTicket ticket = new ControlTicket("Ventas", venta.getIdventa());
            ControlTicketNDB ticket = new ControlTicketNDB(
                    (DefaultTableModel) tblVenta.getModel(),
                    empleado.getNombre(),venta.getIdventa().toString());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, "El error es: " + e,
                    "Imposible imprimir Ticket", 0);
            txtTotal.setText("$0.0");
        }
        DefaultTableModel model = (DefaultTableModel) tblVenta.getModel();
        int numRows = tblVenta.getRowCount() - 1;
        while (tblVenta.getRowCount() > -1 && numRows > -1) {
            model.removeRow(numRows);
            numRows--;
        }
        txtTotal.setText("$0.0");
        JOptionPane.showMessageDialog(this, "¡Vendido!", "Venta realizada", 1);
        txtTotal.setText("$0.0");
    }//GEN-LAST:event_btnVenderActionPerformed

    private boolean isProductos() {
        try {
            ControlProduct cp = new ControlProduct();
            List productos = cp.selectAll();
            if (productos.size() > 0) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, "error: " + e, "Ha ocurrido un error", 0);
            return false;
        }
    }

    private void btnBorrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBorrarActionPerformed
        if (tblVenta.getSelectedRow() > -1) {
            DefaultTableModel model = (DefaultTableModel) tblVenta.getModel();
            model.removeRow(tblVenta.getSelectedRow());
            txtTotal.setText("$0.0");
            int numRows = 0;
            while (numRows < tblVenta.getRowCount()) {
                txtTotal.setText("$"
                        + (Float.parseFloat(model.getValueAt(numRows, 2).toString().substring(1))
                        + Float.parseFloat(txtTotal.getText().substring(1))));
                numRows++;
            }
            JOptionPane.showMessageDialog(this, "Producto removido de la venta", "Eliminado", 1);
        } else {
            JOptionPane.showMessageDialog(this, "Seleccione un producto de la "
                    + "tabla para poder borrarlo.", "Producto no seleccionado", 0);
        }
    }//GEN-LAST:event_btnBorrarActionPerformed

    private void btnCerrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCerrarActionPerformed
        DefaultTableModel model = (DefaultTableModel) tblVenta.getModel();
        int numRows = tblVenta.getRowCount() - 1;
        while (tblVenta.getRowCount() > -1 && numRows > -1) {
            model.removeRow(numRows);
            numRows--;
        }
        txtTotal.setText("$0.0");
        JOptionPane.showMessageDialog(this, "Venta cancelada", "Cancelado", 1);
    }//GEN-LAST:event_btnCerrarActionPerformed

    private void cargarCategorias() {
        ControlCategories cc = new ControlCategories();
        Categorias categoria = new Categorias();
        List listCategorias = cc.selectAll();
        int nCategorias = listCategorias.size();
        jpnCategoria = new JPanel[nCategorias];//Paneles
        JScrollPane jspScroll[] = new JScrollPane[nCategorias];
        if (nCategorias > 0) {
            for (int i = 0; i < nCategorias; i++) {
                jpnCategoria[i] = new JPanel();
                //Recupera el objeto
                categoria = (Categorias) listCategorias.get(i);
                jspScroll[i] = new JScrollPane();
                final Categorias cat = categoria;
                final int index = i;

                //Agregar el color del panel segun toque
                coloresCategorias(jpnCategoria[i]);

                //modificar el panel autogenerado y agregarlo al tabpanel
                jspScroll[i].setViewportView(jpnCategoria[i]);
                jtpCategorias.addTab(categoria.getNombre(), jspScroll[i]);

//-----------------AQUI AGREGAR OPCION!!!!!!!-------------------------------
                //verificar si tiene subcategorias
                creaPanelesSubcategorias(cat, jpnCategoria[index]);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No hay categorias registradas en la base de datos." + "\n"
                    + "Por favor introdusca al menos una categoria y un producto para" + "\n"
                    + "poder vender.");
            btnVender.setEnabled(false);
            btnBorrar.setEnabled(false);
            btnCerrar.setEnabled(false);
        }
    }

    //Llena la tabla de pagos para clientes
    private void creaPanelesSubcategorias(Categorias categoria, JPanel jpnCategoria) {
        if (categoria.isSubcategorias()) {
            //Agregar el layout nesesario para expandir las tabb
            jpnCategoria.setLayout(new BorderLayout(20, 20));

            //obtener todas las subcategorias
            ControlSubcategoryDetail cs = new ControlSubcategoryDetail();
            List listSubcategorias = cs.selectByIdCategoria(categoria.getIdcategoria());

            //Agregar subcategorias
            JTabbedPane tabPanel = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT);
            ControlSubcategory csub = new ControlSubcategory();
            Detallesubcategoria detSub;
            Subcategoria subcategoria;
            JTabbedPane UnitarioOJarra;
            int numSubcategorias = listSubcategorias.size();
            //Creacion de componentes nesesarios para organizar los 
            //productos
            JScrollPane jspUnitario[] = new JScrollPane[numSubcategorias];
            JScrollPane jspJarra[] = new JScrollPane[numSubcategorias];
            JScrollPane jspJarra3[] = new JScrollPane[numSubcategorias];
            JPanel subPanUnitario[] = new JPanel[numSubcategorias];
            JPanel subPanJarra[] = new JPanel[numSubcategorias];
            JPanel subPanJarra3[] = new JPanel[numSubcategorias];
            for (int y = 0; y < listSubcategorias.size(); y++) {

                jspUnitario[y] = new JScrollPane();
                jspJarra[y] = new JScrollPane();
                jspJarra3[y] = new JScrollPane();
                subPanUnitario[y] = new JPanel();
                subPanJarra[y] = new JPanel();
                subPanJarra3[y] = new JPanel();

                //color de paneles internos
                jspUnitario[y].getViewport().setOpaque(false);
                jspJarra[y].getViewport().setOpaque(false);
                jspJarra3[y].getViewport().setOpaque(false);
                subPanUnitario[y].setOpaque(false);
                subPanJarra[y].setOpaque(false);
                subPanJarra3[y].setOpaque(false);

                //creo el tabbPanel para subdividir si seran en taza o jarra
                UnitarioOJarra = new JTabbedPane();

                //Crear cada tab interna con su panel
                detSub = (Detallesubcategoria) listSubcategorias.get(y);
                subcategoria = csub.selectOne(detSub.getSubcategoria().getIdsubcategoria());
                //Cambio los layouts a los paneles para tener mas control 
                //de los componentes internos
                layoutSubPaneles(subPanUnitario[y]);
                layoutSubPaneles(subPanJarra[y]);
                layoutSubPaneles(subPanJarra3[y]);
                //Muestro los listProductos que pertenecen a cada panel
                mostrarProductos(subPanUnitario[y], subPanJarra[y], subPanJarra3[y], categoria, subcategoria);
                //Agrego cada panel al scrollpane que le corresponde
                jspUnitario[y].setViewportView(subPanUnitario[y]);
                jspJarra[y].setViewportView(subPanJarra[y]);
                jspJarra3[y].setViewportView(subPanJarra3[y]);
                //agrego a cada tabb el panel perteneciente
                UnitarioOJarra.addTab("Taza", jspUnitario[y]);
                UnitarioOJarra.addTab("Tetera para 2", jspJarra[y]);
                UnitarioOJarra.addTab("Tetera para 3", jspJarra3[y]);
                //Agrego el panel con la subdivicion a la tabb de la subcategoria
                tabPanel.addTab(subcategoria.getNombre(), UnitarioOJarra);
            }
            jpnCategoria.add(tabPanel);
        } else {
            //si no tiene subcategorias poner el layout general
            layouts(jpnCategoria);
            mostrarProductosSinSubcat(categoria, jpnCategoria);
        }
    }

    private void layoutSubPaneles(JPanel panel) {

        panel.setPreferredSize(new java.awt.Dimension(950, 2400));
        FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
        layout.setVgap(20);
        layout.setHgap(30);
        panel.setLayout(layout);

    }

    public void coloresCategorias(JPanel categoria) {
        Color colores[] = new Color[5];
        colores[0] = new java.awt.Color(102, 102, 0);
        colores[1] = new java.awt.Color(138, 117, 0);
        colores[2] = new java.awt.Color(227, 155, 225);
        colores[3] = new java.awt.Color(252, 192, 107);
        colores[4] = new java.awt.Color(255, 255, 255);

        if (contadorColores < 5) {
            categoria.setBackground(colores[contadorColores]);
            contadorColores++;
        } else {
            contadorColores = 0;
            categoria.setBackground(colores[contadorColores]);
        }
    }

    private void mostrarProductosSinSubcat(Categorias cat, JPanel panelCategoria) {
        ControlProduct cp = new ControlProduct();
        //Obtiene los productos con esta categoria
        List listProductos = cp.selectAllByCategory(cat.getIdcategoria());

        for (int i = 0; i < listProductos.size(); i++) {
            Producto objProducto = (Producto) listProductos.get(i);

            //crear el minipanel que contendra las acciones, nombre e icono
            JPanel pan = new JPanel();
            JLabel nombre = new JLabel();

            //Cambiar las propiedades de la label
            nombre.setOpaque(true);
            nombre.setFont(new java.awt.Font("Arial", 0, 16));

            //Crear el panel
            pan.setLayout(new BorderLayout());
            nombre.setText(objProducto.getNombre());
            nombre.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
            nombre.setSize(100, 14);
            pan.add(nombre, BorderLayout.SOUTH);
            agregarIconoSinSubcat(pan, cat, objProducto);
            pan.setOpaque(false);
            panelCategoria.add(pan);
        }
    }

    private void mostrarProductos(JPanel unitario, JPanel jarra, JPanel jarra3, Categorias cat, Subcategoria sub) {

        ControlProduct cp = new ControlProduct();
        //Obtiene los productos con esta categoria
        List listProductos = cp.selectAllByCategory(cat.getIdcategoria());
        int numProductos = listProductos.size();
        //crear el minipanel que contendra las acciones, nombre e icono
        JPanel pan[] = new JPanel[numProductos];
        JLabel nombre[] = new JLabel[numProductos];
        for (int i = 0; i < numProductos; i++) {
            Producto objProducto = (Producto) listProductos.get(i);
            ControlProductDetail cpd = new ControlProductDetail();
            //Obtiene los detalles de este producto
            List listDetProducto = cpd.selectOneByProductSubcategory(objProducto.getIdproducto(), sub.getIdsubcategoria());
            int numDetProductos = listDetProducto.size();
            for (int y = 0; y < numDetProductos; y++) {
                //obtener de que subcategoria pertenece para agregarlo a ella

                //crear el minipanel que contendra las acciones, nombre e icono
                pan[y] = new JPanel();
                nombre[y] = new JLabel();
                Detalleproducto detProducto = (Detalleproducto) listDetProducto.get(y);

                //Cambiar las propiedades de la label
                nombre[y].setOpaque(true);
                nombre[y].setFont(new java.awt.Font("Arial", 0, 16));

                //Crear el panel
                pan[y].setLayout(new BorderLayout());
                nombre[y].setText(objProducto.getNombre());
                nombre[y].setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
                nombre[y].setSize(100, 14);
                pan[y].add(nombre[y], BorderLayout.SOUTH);
                agregarIcono(pan[y], cat, objProducto, sub);
                pan[y].setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
                pan[y].setOpaque(false);

                //Agregar a panel correspondiente
                switch (detProducto.getTipo()) {
                    case "Unitario":
                        unitario.add(pan[y]);
                        break;
                    case "Jarra2":
                        jarra.add(pan[y]);
                        break;
                    case "Jarra3":
                        jarra3.add(pan[y]);
                        break;
                }
            }
        }
    }

    private void agregarIconoSinSubcat(JPanel producto, Categorias cat, final Producto p) {
        JPanel ico = new JPanel();
        ico.setLayout(new FlowLayout());
        ico.setOpaque(false);
        JLabel icono = new JLabel();
        //Seleccionar el icono correspondiente
        switch (cat.getNombre()) {
            case "Postres":
            case "postres":
            case "POSTRES":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/cake.png")));
                break;
            case "Te":
            case "te":
            case "TE":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/tecup.png")));
                break;
            case "Café":
            case "café":
            case "CAFÉ":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/cafecup.png")));
                break;
            case "Granel":
            case "granel":
            case "GRANEL":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/granel.png")));
                break;
            default:
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/tecup.png")));
                break;
        }
        ico.add(icono);
        producto.add(ico, BorderLayout.NORTH);
        producto.setSize(100, 100);
        producto.setOpaque(false);
        producto.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                actionPanelSinSubcat(evt, p.getIdproducto());
            }
        });
    }

    private void agregarIcono(JPanel producto, Categorias cat, final Producto p, final Subcategoria sub) {
        JPanel ico = new JPanel();
        ico.setLayout(new FlowLayout());
        ico.setOpaque(false);
        JLabel icono = new JLabel();
        //Seleccionar el icono correspondiente
        switch (cat.getNombre()) {
            case "Postres":
            case "postres":
            case "POSTRES":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/cake.png")));
                break;
            case "Te":
            case "te":
            case "TE":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/tecup.png")));
                break;
            case "Cafe":
            case "café":
            case "CAFÉ":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/cafecup.png")));
                break;
            case "Granel":
            case "granel":
            case "GRANEL":
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/granel.png")));
                break;
            default:
                icono.setText("");
                icono.setIcon(new javax.swing.ImageIcon(getClass().getResource("/IconosEspecializados/tecup.png")));
                break;
        }
        ico.add(icono);
        producto.add(ico, BorderLayout.NORTH);
        producto.setSize(100, 100);
        producto.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                actionPanel(evt, p.getIdproducto(), sub.getIdsubcategoria());
            }
        });
    }

    private void layouts(JPanel panel) {
        FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
        layout.setVgap(20);
        layout.setHgap(30);
        panel.setLayout(layout);
    }

    private void actionPanel(java.awt.event.MouseEvent evt, int producto, int subcategoria) {
        agregarATabla(producto, subcategoria);
    }

    private void actionPanelSinSubcat(java.awt.event.MouseEvent evt, int producto) {
        agregarATablaSinSubcat(producto);
    }

    private void agregarATablaSinSubcat(int producto) {
        DefaultTableModel model = (DefaultTableModel) tblVenta.getModel();
        ControlProduct cp = new ControlProduct();
        ControlProductDetail cpd = new ControlProductDetail();

        try {
            Producto p = (Producto) cp.selectOnePDV(producto).get(0);
            Detalleproducto pd = (Detalleproducto) cpd.selectAllByProduct(producto).get(0);

            model.addRow(new String[]{String.valueOf(pd.getIddetalleproducto()), p.getNombre(), "$" + String.valueOf(pd.getCosto())});

            txtTotal.setText("$"
                    + (Float.parseFloat(model.getValueAt(tblVenta.getRowCount() - 1, 2).toString().substring(1))
                    + Float.parseFloat(txtTotal.getText().substring(1))));
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e, "Error", 0);
        }
    }

    private void agregarATabla(int producto, int subcategoria) {
        DefaultTableModel model = (DefaultTableModel) tblVenta.getModel();
        ControlProduct cp = new ControlProduct();
        ControlProductDetail cpd = new ControlProductDetail();

        try {
            Producto p = (Producto) cp.selectOnePDV(producto).get(0);
            Detalleproducto pd = (Detalleproducto) cpd.selectOneByProductSubcategory(producto, subcategoria).get(0);

            model.addRow(new String[]{String.valueOf(pd.getIddetalleproducto()), p.getNombre(), "$" + String.valueOf(pd.getCosto())});

            txtTotal.setText("$"
                    + (Float.parseFloat(model.getValueAt(tblVenta.getRowCount() - 1, 2).toString().substring(1))
                    + Float.parseFloat(txtTotal.getText().substring(1))));

        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, e, "Error", 0);
        }
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBorrar;
    private javax.swing.JButton btnCerrar;
    private javax.swing.JButton btnVender;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTabbedPane jtpCategorias;
    private javax.swing.JLabel lblIcono;
    private javax.swing.JPanel panControles;
    private javax.swing.JScrollPane spanVenta;
    private javax.swing.JTable tblVenta;
    private javax.swing.JTextField txtTotal;
    // End of variables declaration//GEN-END:variables
}
